home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / pascal / djsquash.com / DJSQUASH.C < prev    next >
Encoding:
C/C++ Source or Header  |  1989-04-06  |  1.5 KB  |  60 lines

  1. #pragma inline
  2. #include <stdio.h>
  3. #include <dos.h>
  4.  
  5. void interrupt (*oldint17)(unsigned BP,unsigned DI,unsigned SI,unsigned DS,
  6.      unsigned ES,unsigned DX,unsigned CS,unsigned BX,unsigned AX);
  7.  
  8. void pchar(unsigned char);
  9.  
  10. void pchar(unsigned char c) {
  11. asm  mov  al,c
  12. asm  xor  ah,ah
  13. asm  mov  dx,0
  14. asm  pushf
  15. asm  call dword ptr oldint17
  16. /*
  17.      (*oldint17)(_BP,_DI,_SI,_DS,_ES,0,_CX,_BX,c);
  18.      (*oldint17)(_BP,_DI,_SI,_DS,_ES,0,_CX,_BX,'-');
  19. */
  20.      }
  21. /* 
  22. void interrupt my_21(unsigned R_BP, unsigned R_DI, unsigned R_SI, unsigned R_DS,
  23. unsigned R_ES, unsigned R_DX, unsigned R_CX, unsigned R_BX, unsigned R_AX) {
  24.      
  25.      }
  26. */
  27. void interrupt my_17(unsigned R_BP, unsigned R_DI, unsigned R_SI, unsigned R_DS,
  28. unsigned R_ES, unsigned R_DX, unsigned R_CX, unsigned R_BX, unsigned R_AX) {
  29.      unsigned char AH,AL;
  30.      AH = (R_AX & 0xFF00) >>4;
  31.      AL = R_AX & 0x00FF;
  32.      if (R_DX != 0) {
  33. asm  mov  ax,R_AX
  34. asm  mov  dx,R_DX
  35. asm  pushf
  36. asm  call dword ptr oldint17
  37.           if(R_DX == 0) (*oldint17)(R_BP,R_DI,R_SI,R_DS,R_ES,R_DX,R_CX,R_BX,0);
  38.           }
  39.      else if (AH == 1) {
  40.           c_init();
  41.           }
  42.      else if (AH == 0) {
  43.           c_filt(AL);
  44.           }
  45.      R_AX = 0x9000;
  46.      }
  47. void keep(unsigned char stat, unsigned size) {
  48.      _DX = size;
  49.      _AL = stat;
  50.      _AH = 0x31;
  51.      geninterrupt(0x21);
  52.      }
  53. main () {
  54.      oldint17 = getvect(0x17);
  55.      c_init();
  56.      setvect(0x17,my_17);
  57.      keep(0,0x10f); /* check with djs.map. last use was 010E6H */
  58.      }
  59.  
  60.